#include "include.h"
#include "usb_custom.h"

////usb device descriptor
//AT(.rodata.usbdev.table)
//const u8 desc_usb_device[18] = {
//    18,                 // Num bytes of the descriptor
//    1,                  // Device Descriptor type
//    0x10,               // Revision of USB Spec. LSB (in BCD)
//    0x01,               // Revision of USB Spec. MSB (in BCD)
//    0,                  // Mass Storage Class
//    0,                  // General Mass Storage Sub Class
//    0,                  // Do not use Class specific protocol
//    USB_CTRL_SIZE,      // Max packet size of Endpoint 0
//
//    //jl:e3b4
//    0x87,               // Vendor ID LSB
//    0x80,               // Vendor ID MSB
//    0x24,               // Product ID LSB
//    0x10,               // Product ID MSB
//    0x00,               // Device Revision LSB (in BCD)
//    0x01,               // Device Revision MSB (in BCD)
//
//    STR_MANUFACTURER,   // Index of Manufacture string descriptor
//    STR_PRODUCT,        // Index of Product string descriptor
//    STR_SERIAL_NUM,     // Index of Serial No. string descriptor
//    1                   // Num Configurations, Must be 1
//};
//
////Language ID
//AT(.rodata.usbdev.table)
//const u8 str_language_id[4] = {
//    4,                  // Num bytes of this descriptor
//    3,                  // String descriptor
//    0x09,               // Language ID LSB
//    0x04                // Language ID
//};
//
////Manufacturer String
//AT(.rodata.usbdev.table)
//const u8 str_manufacturer[16] = {
//    16,                 // Num bytes of this descriptor
//    3,                  // String descriptor
//    'G',    0,
//    'e',    0,
//    'n',    0,
//    'e',    0,
//    'r',    0,
//    'i',    0,
//    'c',    0
//};
//
////Product String
//AT(.rodata.usbdev.table)
//const u8 str_product[28] = {
//    28,                 // Num bytes of this descriptor
//    3,                  // String descriptor
//    'U',    0,
//    'S',    0,
//    'B',    0,
//    '2',    0,
//    '.',    0,
//    '0',    0,
//    ' ',    0,
//    'D',    0,
//    'e',    0,
//    'v',    0,
//    'i',    0,
//    'c',    0,
//    'e',    0
//};
//
////Serial Number
//AT(.rodata.usbdev.table)
//const u8 str_serial_number[30] = {
//    30,                 // Num bytes of this descriptor
//    3,                  // String descriptor
//    '2',    0,
//    '0',    0,
//    '1',    0,
//    '7',    0,
//    '0',    0,
//    '7',    0,
//    '2',    0,
//    '6',    0,
//    '9',    0,
//    '0',    0,
//    '5',    0,
//    '9',    0,
//    '2',    0,
//    '3',    0
//};

////Config descriptor: HID (9 + 9 + 7 = 25)
//AT(.rodata.usbdev.table)
//const u8 desc_config_hid[32] = {
//    //Interface Descriptor:
//    9,                  // Num bytes of this descriptor
//    4,                  // Interface descriptor type
//    4,                  // Interface Number
//    0,                  // Alternate interface number
//    2,                  // Num endpoints of this interface
//    0x03,               // Interface Sub Class: Human Interface Device
//    0,                  // Interface Sub Class:
//    0,                  // Class specific protocol:
//    0,                  // Index of Interface string descriptor
//
//    //HID Descriptor:
//    9,                  // Num bytes of this descriptor
//    0x21,               // HID Type
//    0x01, 0x02,         // HID Class Specification compliance
//    0x00,               // Country Code: none
//    0x01,               // Number of descriptors to follow
//    0x22,               // Report descriptor type
//    (u8)(sizeof(desc_hid_report)),
//    (u8)(sizeof(desc_hid_report)>>8),  // Len of Report descriptor
//
//    //EndpointDescriptor:
//    7,                  // Num bytes of this descriptor
//    5,                  // Endpoint descriptor type
//    3,                  // Endpoint number: HID OUT
//    0x03,               // Interrupt Endpoint
//    64, 0x00,           // Maximum packet size
//    0x01,               // Poll every 1 msec seconds
//
//    //EndpointDescriptor:
//    7,                  // Num bytes of this descriptor
//    5,                  // Endpoint descriptor type
//    3 | 0x80,           // Endpoint number: HID IN
//    0x03,               // Interrupt Endpoint
//    64, 0x00,           // Maximum packet size
//    0x01,               // Poll every 1 msec seconds
//};
//
////HID report, consumer control
//AT(.rodata.usbdev.table)
//const u8 desc_hid_report[35+35] = {
//    0x05, 0x0c,         // USAGE_PAGE (Consumer Devices)
//    0x09, 0x01,         // USAGE (Consumer Control)
//    0xa1, 0x01,         // COLLECTION (Application)
//    0x85, 0x01,         // GLOBAL_REPORT_ID(1)
//
//    0x15, 0x00,         // LOGICAL_MINIMUM (0)
//    0x25, 0x01,         // LOGICAL_MAXIMUM (1)
//
//    0x09, 0xb3,         // USAGE (fast forward)
//    0x09, 0xb5,         // USAGE (Scan Next Track)
//    0x09, 0xb6,         // USAGE (Scan Previous Track)
//    0x09, 0xb7,         // USAGE (stop)
//    0x09, 0xcd,         // USAGE (Play/Pause)
//    0x09, 0xe2,         // USAGE (Mute)
//    0x09, 0xe9,         // USAGE (Volume Up)
//    0x09, 0xea,         // USAGE (Volume Down)
//
//    0x75, 0x01,         // REPORT_SIZE (1)
//    0x95, 0x08,         // REPORT_COUNT (8)
//    0x81, 0x42,         // INPUT (Data,Var,Abs)
//    0xc0,               // END_COLLECTION
//
//    0x05, 0x00,
//    0x09, 0x01,         // USAGE
//    0xa1, 0x01,         // COLLECTION (Application)
//    0x85, 0x02,         // GLOBAL_REPORT_ID(2)
//
//    0x09, 0x02,         // USAGE
//    0x15, 0x00,         // LOGICAL_MINIMUM (0)
//    0x26, 0xff, 0x00,   // LOGICAL_MAXIMUM (255)
//    0x75, 0x08,         // REPORT_SIZE (8)
//    0x95, 0x3f,         // REPORT_COUNT (64)
//    0x81, 0x02,         // INPUT (Data,Var,Abs)
//
//    0x09, 0x02,         // USAGE
//    0x15, 0x00,         // LOGICAL_MINIMUM (0)
//    0x26, 0xff, 0x00,   // LOGICAL_MAXIMUM (255)
//    0x75, 0x08,         // REPORT_SIZE (8)
//    0x95, 0x3f,         // REPORT_COUNT (64)
//    0x91, 0x02,         // OUTPUT (Data,Var,Abs)
//    0xc0,               // END_COLLECTION
//};
//
//u8 get_desc_config_hid_size(void){
//    return sizeof(desc_config_hid);
//}
//
//u8 get_desc_hid_report_size(void){
//    return sizeof(desc_hid_report);
//}
//
//void deal_hid_get_data(u8* data, u8 len){
//    my_print_r(data, len);
//}
